#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int Div(int x, int y)
//{
//	return x / y;
//}
//int Mul(int x, int y)
//{
//	return x * y;
//}
//int Sub(int x, int y)
//{
//	return x - y;
//}
//int Add(int x, int y)
//{
//	return x + y;
//}
//void menu()
//{
//	printf("*******************\n");
//	printf("***1.add 2.sub*****\n");
//	printf("***3.mul 4.div*****\n");
//	printf("***0.exit**********\n");
//}
//int main()
//{
//	int input = 0;
//	int x = 0;
//	int y = 0;
//	int ret = 0;
//	//定义一个函数指针数组
//	int (*pf[5])(int, int) = { 0,Add,Sub,Mul,Div };
//	do
//	{
//		menu();
//		printf("请选择上述操作\n");
//		scanf("%d", &input);
//		if (input == 0)
//		{
//			printf("退出计算器");
//			break;
//		}
//		else if (input >= 1 && input <= 4)
//		{
//			//对数组元素进行引用
//			printf("请输入两个操作数\n");
//			scanf("%d %d", &x, &y);
//			ret = pf[input](x, y);
//			printf("%d\n", ret);
//		}
//		else
//		{
//			printf("输入错误\n");
//		}
//	} while (input);
//	return 0;
//}


//转移表，起过渡作用的

//指向函数指针数组的指针
//先写一个函数指针
//int (*pf)(int, int);//函数指针
//int (*pf[5])(int, int);//函数指针数组
//int (*(*pf)[5])(int, int)//指向函数指针数组的指针
//首先是一个指针，看括号之外，这个指针指向一个数组，把(*pf)[5]拿掉
//int(*)(int int),数组里的每一个元素都是函数指针


//写一个计算器实现加，减，乘，除
//void cale(int (*pf)(int,int))
//{
//	int x = 0;
//	int y = 0;
//	int ret = 0;
//	printf("请输入两个数\n");
//	scanf("%d %d", &x, &y);
//	ret = pf(x, y);
//	printf("%d\n", ret);
//}
//int Div(int x, int y)
//{
//	return x/y;
//}
//int Mul(int x, int y)
//{
//	return x*y;
//}
//int Sub(int x, int y)
//{
//	return x - y;
//}
//int Add(int x,int y)
//{
//	return x + y;
//}
//void menu()
//{
//	printf("*******************\n");
//	printf("***1.add 2.sub*****\n");
//	printf("***3.mul 4.div*****\n");
//	printf("***0.exit**********\n");
//}
//int main()
//{
//	int input = 0;
//	
//	do
//	{
//		menu();
//		printf("请选择上述操作\n");
//		scanf("%d",&input);
//		switch (input)
//		{
//		case 1:
//			cale(Add);//传递函数的地址，也就是函数指针
//			break;
//		case 2:
//			cale(Sub);
//			break;
//		case 3:
//			cale(Mul);
//			break;
//		case 4:
//			cale(Div);
//			break;
//		case 0:
//			printf("退出计算器");
//			break;
//		default:
//			printf("选择错误");
//			break;
//		}
//	} while (input);
//	return 0;
//}

void buffer_sort(int arr[], int length)
{
	//冒泡排序
	//第一个和第二个比较，如果第一个大，就和第二个交换位置；如果第二个大，就保持不变
	//依次第二个和第三个比较，第三个和第四个比较
	int i = 0;
	int j = 0;
	int temporary = 0;
	for (i=0;i<length-1;i++)
	{
		for (j=0;j<length-1-i;j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temporary = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temporary;
			}
		}
	}
}
int main()	
{
	int arr[] = { 9,8,7,6,5,4,3,2,1 };
	int i = 0;
	int length = sizeof(arr) / sizeof(arr[0]);
	buffer_sort(arr,length);
	for (i=0;i<9;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}